/*
file: Login.h
use	: 封装一个登陆系统类。 所有登录的逻辑代码封装在这个类里
ver :
	1.0 by whc. at 2016-3-29. anything call me.
memo:
	Sys = System 系统的简称， 其他文件不在提示
*/

#ifndef LOGIN_H
#define LOGIN_H

#include "../../Frame/Client.h"
#include "../../Frame/DBStruct.h"
#include "../../Frame/Common.h"
#include "../../Frame/AccountManager.h"
#include "ServerInfo.h"
#include "ClientInfo.h"
#include <iostream>
#include <list>

using namespace std;


class Login
{
	public:
		Login();
		~Login();

		// Fuction	: 帐号密码验证
		// Param	: _user:帐号 _pwd:密码
		// return	: 0: 通过验证 1: 账户密码错误
		int Verification(std::string _user, std::string _pwd, int& _userId);

		// Fuction	: 添加一个通过验证的服务器信息
		// Param	: _pClient:socket链接的客户端信息
		// return	: void
		void AddServerInfo(Client* _pClient);

		// Fuction	: 添加一个通过验证的客户端信息
		// Param	: _pClient:socket链接的客户端信息
		// return	: void
		void AddClientInfo(Client* _pClient);

		// Fuction	: 获取某个服务器信息
		// Param	: _fd:socket fd
		// return	: ServerInfo* 服务器信息指针, nullptr:失败
		ServerInfo* GetServerInfo(int _fd);

		// Fuction	: 获取某个客户端信息
		// Param	: _fd:socket fd
		// return	: ClientInfo* 客户端信息指针， nullptr:失败
		ClientInfo* GetClientInfo(int _fd);

		// Fuction	: 获取服务器个数
		// Param	:
		// return	: 返回服务器个数
		int GetServerCount();

		// Fuction	: 获取客户端个数
		// Param	:
		// return	: 返回客户端个数
		int GetClientCount();

		// Fuction	: 获取服务器列表
		// Param	:
		// return	:
		list<ServerInfo>& GetServerList();

		// Fuction	: 注册帐号
		// Param	:
		// return	:
		int Register(string _user, string _pwd);

	protected:
	private:
		list<ServerInfo> m_Server_lst; 				// 服务器列表 链接并通过验证的
		list<ClientInfo> m_Client_lst;				// 客户端列表 链接并通过验证的
};

#endif // LOGIN_H
